{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "## RNN——MNIST"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "d0170d30f96b22a5"
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:56:13.729920Z",
     "start_time": "2025-06-11T14:56:09.985126Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import gzip\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "from sklearn.metrics import accuracy_score, precision_recall_fscore_support, confusion_matrix, classification_report\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# 数据集路径\n",
    "mnist_data_dir = r'D:\\Machine_learning\\jiqixuexi\\mnist\\mnist\\MNIST\\raw'\n",
    "\n",
    "# 自定义MNIST数据集加载函数\n",
    "def load_mnist(data_dir):\n",
    "    # 加载训练数据\n",
    "    with gzip.open(os.path.join(data_dir, 'train-images-idx3-ubyte.gz'), 'rb') as f:\n",
    "        train_images = np.frombuffer(f.read(), np.uint8, offset=16).reshape(-1, 28, 28)\n",
    "    with gzip.open(os.path.join(data_dir, 'train-labels-idx1-ubyte.gz'), 'rb') as f:\n",
    "        train_labels = np.frombuffer(f.read(), np.uint8, offset=8)\n",
    "\n",
    "    # 加载测试数据\n",
    "    with gzip.open(os.path.join(data_dir, 't10k-images-idx3-ubyte.gz'), 'rb') as f:\n",
    "        test_images = np.frombuffer(f.read(), np.uint8, offset=16).reshape(-1, 28, 28)\n",
    "    with gzip.open(os.path.join(data_dir, 't10k-labels-idx1-ubyte.gz'), 'rb') as f:\n",
    "        test_labels = np.frombuffer(f.read(), np.uint8, offset=8)\n",
    "\n",
    "    # 归一化数据\n",
    "    train_images = train_images / 255.0\n",
    "    test_images = test_images / 255.0\n",
    "\n",
    "    return train_images, test_images, train_labels, test_labels"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:56:37.790201Z",
     "start_time": "2025-06-11T14:56:37.783976Z"
    }
   },
   "id": "d382ea08a312e6b0",
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# 自定义MNIST数据集类\n",
    "class CustomMNISTDataset(Dataset):\n",
    "    def __init__(self, images, labels):\n",
    "        self.images = images\n",
    "        self.labels = labels\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.images)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        image = self.images[idx]\n",
    "        label = self.labels[idx]\n",
    "        image = torch.from_numpy(image).float()  # 转换为PyTorch张量\n",
    "        label = torch.from_numpy(np.array(label)).long()  # 确保标签是torch.long类型\n",
    "        return image, label\n",
    "\n",
    "# 加载数据集\n",
    "train_images, test_images, train_labels, test_labels = load_mnist(mnist_data_dir)\n",
    "\n",
    "# 创建自定义数据集\n",
    "train_dataset = CustomMNISTDataset(train_images, train_labels)\n",
    "test_dataset = CustomMNISTDataset(test_images, test_labels)\n",
    "\n",
    "# 创建数据加载器\n",
    "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n",
    "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:56:38.753100Z",
     "start_time": "2025-06-11T14:56:38.443577Z"
    }
   },
   "id": "4967aa9eed8ef2c5",
   "execution_count": 3
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# 定义适用于MNIST的RNN模型\n",
    "class RNN(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_layers, num_classes):\n",
    "        super(RNN, self).__init__()\n",
    "        self.hidden_size = hidden_size\n",
    "        self.num_layers = num_layers\n",
    "        self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)\n",
    "        self.fc = nn.Linear(hidden_size, num_classes)\n",
    "\n",
    "    def forward(self, x):\n",
    "        # 初始化隐藏状态\n",
    "        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)\n",
    "        # 前向传播 RNN\n",
    "        out, _ = self.rnn(x, h0)\n",
    "        # 取最后一个时间步的输出\n",
    "        out = self.fc(out[:, -1, :])\n",
    "        return out\n",
    "\n",
    "# 模型参数\n",
    "input_size = 28  # MNIST 图像宽度\n",
    "sequence_length = 28  # MNIST 图像高度\n",
    "hidden_size = 128\n",
    "num_layers = 2\n",
    "num_classes = 10\n",
    "\n",
    "# 初始化模型、损失函数和优化器\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "model = RNN(input_size, hidden_size, num_layers, num_classes).to(device)\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.Adam(model.parameters(), lr=0.001)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:56:42.554666Z",
     "start_time": "2025-06-11T14:56:39.912222Z"
    }
   },
   "id": "2757a7dd58550b35",
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [1/10], Loss: 0.6007\n",
      "Epoch [2/10], Loss: 0.2606\n",
      "Epoch [3/10], Loss: 0.1938\n",
      "Epoch [4/10], Loss: 0.1632\n",
      "Epoch [5/10], Loss: 0.1373\n",
      "Epoch [6/10], Loss: 0.1337\n",
      "Epoch [7/10], Loss: 0.1274\n",
      "Epoch [8/10], Loss: 0.1164\n",
      "Epoch [9/10], Loss: 0.1156\n",
      "Epoch [10/10], Loss: 0.1166\n",
      "Training Time: 39.32 seconds\n",
      "Test Accuracy: 0.9686\n",
      "Inference Time: 0.39 seconds\n"
     ]
    }
   ],
   "source": [
    "# 训练模型\n",
    "num_epochs = 10\n",
    "start_time = time.time()\n",
    "\n",
    "for epoch in range(num_epochs):\n",
    "    model.train()\n",
    "    epoch_loss = 0.0\n",
    "    for i, (images, labels) in enumerate(train_loader):\n",
    "        images = images.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 调整数据形状为 (batch_size, sequence_length, input_size)\n",
    "        images = images.view(-1, sequence_length, input_size)\n",
    "        optimizer.zero_grad()\n",
    "        outputs = model(images)\n",
    "        loss = criterion(outputs, labels)\n",
    "        epoch_loss += loss.item()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {epoch_loss / len(train_loader):.4f}')\n",
    "\n",
    "train_time = time.time() - start_time\n",
    "print(f\"Training Time: {train_time:.2f} seconds\")\n",
    "\n",
    "# 测试模型\n",
    "model.eval()\n",
    "start_inference = time.time()\n",
    "\n",
    "with torch.no_grad():\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    all_labels = []\n",
    "    all_preds = []\n",
    "    for images, labels in test_loader:\n",
    "        images = images.to(device)\n",
    "        labels = labels.to(device)\n",
    "        images = images.view(-1, sequence_length, input_size)\n",
    "        outputs = model(images)\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "        total += labels.size(0)\n",
    "        correct += (predicted == labels).sum().item()\n",
    "        all_labels.extend(labels.cpu().numpy())\n",
    "        all_preds.extend(predicted.cpu().numpy())\n",
    "    test_acc = correct / total\n",
    "    print(f\"Test Accuracy: {test_acc:.4f}\")\n",
    "\n",
    "inference_time = time.time() - start_inference\n",
    "print(f\"Inference Time: {inference_time:.2f} seconds\")\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:57:23.945382Z",
     "start_time": "2025-06-11T14:56:44.229782Z"
    }
   },
   "id": "17abf8f59c778f0b",
   "execution_count": 5
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Performance Metrics:\n",
      "Training Time: 39.32 seconds\n",
      "Inference Time: 0.39 seconds\n",
      "Accuracy: 0.9686\n",
      "Precision: 0.9690\n",
      "Recall: 0.9686\n",
      "F1-score: 0.9686\n",
      "\n",
      "Confusion Matrix:\n",
      " [[ 946    0    1    2    0    4   23    1    3    0]\n",
      " [   0 1121    3    2    0    0    4    2    3    0]\n",
      " [   2    1  989   18    2    0    4    8    7    1]\n",
      " [   0    1    3  991    0    8    0    3    0    4]\n",
      " [   0    0    0    1  958    0    5    3    0   15]\n",
      " [   2    2    2   20    1  840   11    9    1    4]\n",
      " [   0    2    1    1    5    7  939    0    3    0]\n",
      " [   0    1    7    2    2    2    0 1010    0    4]\n",
      " [   1    1    2   17    2   14    3    8  911   15]\n",
      " [   1    1    0    3    7    4    0   12    0  981]]\n",
      "\n",
      "Classification Report:\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.99      0.97      0.98       980\n",
      "           1       0.99      0.99      0.99      1135\n",
      "           2       0.98      0.96      0.97      1032\n",
      "           3       0.94      0.98      0.96      1010\n",
      "           4       0.98      0.98      0.98       982\n",
      "           5       0.96      0.94      0.95       892\n",
      "           6       0.95      0.98      0.96       958\n",
      "           7       0.96      0.98      0.97      1028\n",
      "           8       0.98      0.94      0.96       974\n",
      "           9       0.96      0.97      0.97      1009\n",
      "\n",
      "    accuracy                           0.97     10000\n",
      "   macro avg       0.97      0.97      0.97     10000\n",
      "weighted avg       0.97      0.97      0.97     10000\n"
     ]
    }
   ],
   "source": [
    "# 计算评估指标\n",
    "accuracy = accuracy_score(all_labels, all_preds)\n",
    "precision, recall, f1, _ = precision_recall_fscore_support(all_labels, all_preds, average='weighted')\n",
    "conf_matrix = confusion_matrix(all_labels, all_preds)\n",
    "\n",
    "# 输出结果\n",
    "print(\"\\nPerformance Metrics:\")\n",
    "print(f\"Training Time: {train_time:.2f} seconds\")\n",
    "print(f\"Inference Time: {inference_time:.2f} seconds\")\n",
    "print(f\"Accuracy: {accuracy:.4f}\")\n",
    "print(f\"Precision: {precision:.4f}\")\n",
    "print(f\"Recall: {recall:.4f}\")\n",
    "print(f\"F1-score: {f1:.4f}\")\n",
    "print(\"\\nConfusion Matrix:\\n\", conf_matrix)\n",
    "print(\"\\nClassification Report:\\n\", classification_report(all_labels, all_preds))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:57:28.801751Z",
     "start_time": "2025-06-11T14:57:28.742320Z"
    }
   },
   "id": "e992835ca8a94a03",
   "execution_count": 6
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 1000x800 with 2 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAK3CAYAAADzvmJbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYdklEQVR4nOzdd3gUVd/G8XtDEpJQg1QLIiV06R1BgVBCRxAQEVA6iKD0JopIUUSRFpqo4IOCdGlBUUAJJICCCAhYAOkJCSQkpOy+f/CSxzyAECa7k+x8P157XTI7u3ufnZ3Jnv2dM2NzOBwOAQAAAMAD8jA7AAAAAIDMjU4FAAAAAEPoVAAAAAAwhE4FAAAAAEPoVAAAAAAwhE4FAAAAAEPoVAAAAAAwhE4FAAAAAEPoVAAA/hXXSAUA3AudCiCT6tq1q0qWLJnqVqpUKVWpUkUdOnTQ119/fdv6ZcqU0aFDh+74fA0aNNDIkSMfeP30sGXLFr388suqXbu2KlasqBYtWmj27NmKiYlJ19f5p/fee081atRQxYoVtWbNmnR5zj179qhkyZLas2dPujzf/bxWyZIltWvXrjuuc/LkyZR1zpw5c9/PnZCQoMmTJ2v9+vX3XLdkyZL66KOP7vu57yYpKUnt2rXTjz/+KEkaOXKkSpYsqXr16t21c/Pee++pZMmS6tq1a8qytH5+P/roI5UsWfK2LEuWLFHbtm1VsWJFVapUSW3bttXChQuVkJCQst7/7od3ut16bzp37qxNmzY92JsDABmYp9kBADy4MmXK6I033kj5d3Jyss6fP68lS5botddeU44cOVSvXr1U948aNUqrVq2St7f3PZ8/res/KLvdrmHDhmnz5s169tln1blzZ2XLlk0///yzFi1apJCQEH3yySfKlStXur7ub7/9pgULFui5555T69atVbRo0XR53rJly+qLL75Q8eLF0+X57oeHh4c2bdqkunXr3nbfxo0bH+g5L168qCVLlmjy5Mn3XPeLL75QwYIFH+h1/mnu3LnKnz+/ateunbLMw8NDFy5c0L59+1S1atXbHnO3L+lGP7/jxo3Tli1b1KtXL5UvX14Oh0Ph4eGaOXOm9u/frzlz5ki62fZ/6tixo9q3b68OHTqkLLv13owZM0a9e/dW9erV9dBDD6U5EwBkVHQqgEwse/bsqlix4m3L69evr1q1aumrr75K1anIkSOHjh8/rtmzZ2vIkCH3fP60rv+gFi5cqA0bNmjWrFkKDAxMWV6rVi3VrFlTnTt31kcffaSxY8em6+tGRUVJkpo3b37HL6sP6m7bxZkqV66sbdu26c0335SnZ+pD+8aNG1W6dGkdOXLEaa+fHu29ePGi5s+fr2XLlqVaXqhQITkcDm3evPm27fTTTz/p/PnzCggIuO35jHx+z549q9WrV+vNN99Ux44dU5Y/9dRTypMnj9555x0dPHhQTz755B3bXrBgwTsuL1eunMqWLau5c+em++cZAMzE8CfADXl7e8vLy+u25aVLl1abNm20cOFC/fLLL/d8nrSu/yASExO1ePFi1atXL1WH4paKFStq8ODBKlGiRMqyGzduaPbs2WratKnKly+vxo0ba/78+bLb7SnrdO3aVWPGjNH8+fP19NNPq3z58urUqZN+/vlnSTeHu9waLtOtWzc1aNBA0p2Hda1atSrV0KEbN27ozTffVL169VSuXDk1bdpUixcvTln/TsOfDh06pJdfflk1atRQ5cqV1bdvXx0/fvy2x+zevVsvvfSSKlSooNq1a2vq1KlKSkq65/sYFBSkqKiolGFDtxw9elR//vmnmjVrdttjtm3bpueff16VKlVKacfSpUslSWfOnFHDhg0lSaNGjUp5f0aOHKlu3brpjTfeUNWqVdW2bVslJSWlGuLzyiuvqHz58vr9999TXmvOnDkqVaqUdu/efdc2fPzxxypUqJCefPLJ2+5r2rSptmzZkmobSzc7TLVr11bu3Llve4yRz+/ly5flcDjuOOSqZcuWeu2115QzZ840PectrVq10sqVKxUZGflAjweAjIhOBZCJORwOJSUlpdxu3Lihv/76S2PHjlVsbKxat25922PGjBmjPHnyaNSoUanGhd9NWtdPq8OHD+vKlSt65pln7rpOnz59Un4tdjgc6tu3rxYuXKj27dtr3rx5atq0qT744INUQ8Gkm3M0vvnmG40dO1bvv/++Ll++rEGDBik5OVkdOnTQ+PHjJUnjx4/XrFmz7jvzpEmT9P3332vEiBFatGiRGjZsqKlTp2rVqlV3XD80NFSdO3eW3W7XpEmT9Pbbb+vcuXPq1KmTTp48mWrdoUOHqkqVKpo3b55atmypxYsXa+XKlffMVLx4cZUoUeK2oUBff/21qlevrnz58qVa/t1332nAgAEqW7as5syZo48++kiPPPKIJk6cqP379yt//vwp70m/fv1SvT/h4eH666+/9NFHH2nAgAG3VUYmTJigbNmy6Y033pDD4dCRI0c0Z84cde/eXbVq1bprG9avX6+mTZve8b6goCBdvHhR+/btS1lmt9u1efNmNW/e/K7P+aCf31KlSqlQoUKaPHmy3nzzTe3YsSNlbk+ePHnUp08fFSlS5L6f758aNmyo5ORkhYSEPNDjASAjolMBZGJhYWEqW7Zsyu3JJ59UkyZNdPToUX344Ycpvy7/U86cOfXmm2/qt99+0+zZs+/5GmldP63Onz8vSXr00Ufva/0dO3boxx9/1JtvvqmePXuqTp06eu211zRw4EB9+eWXOnHiRMq6SUlJWrRokRo1aqTAwEANHDhQ58+f15EjR1SwYMGUOQ/FixdXmTJl7jvz3r17Vbt2bTVv3lw1atTQsGHDNGjQIPn7+99x/enTp+uxxx7TwoUL1ahRIwUFBemzzz6Tp6fnbZObO3TooAEDBqhWrVoaNWqUHn30UX333Xf3latZs2b65ptvlJiYmLJs48aNatGixW3rnjhxQm3atNGYMWNUq1YtPfPMM5o+fbqkm58rb29vlS5dWpJUuHDhVO9PUlKS3nzzTdWqVUuNGjW67bkfeughTZgwQXv37tWKFSs0YsQIFS1aVK+99tpds588eVKXLl26Y5VCksqXL6/ChQtr8+bNKcvCw8MVFRV1xwy3POjn19vbW/Pnz9cTTzyhzz//XL169VK1atXUvn17LVy4UPHx8ff9XP/Lz89PxYoV+9eqDQBkNnQqgEysbNmyWrlypVauXKnZs2crICBARYoU0YwZM+76i690c4hPq1attHDhQh0+fPier5PW9aWbk2T/WUX532Ert3h43DwM3e3+/7V3715lyZJFQUFBqZa3atVKklINOSpevLiyZ8+e8u8CBQpIkuLi4u7rte6mRo0aWrFihXr16qXPP/9cf//9twYMGHDHasv169d16NAhBQUFKUuWLCnLc+bMqWeeeea2M0RVqlQp1b8LFiyo69ev31euoKAgRUdHpwyB+vnnn3XhwgU1btz4tnV79uypqVOn6vr16zp69Kg2bdqk+fPnS1KqTsmd+Pj4qHDhwv+6TtOmTdW8eXO98cYb+vPPP/Xee+/962Tp06dPS/r3zmWzZs1SDYH6+uuv9fTTT6faxnfyIJ9fSQoICNCaNWu0cuVKDR48WDVq1NDx48f17rvvqk2bNoaGLz3yyCNpOhMXAGR0dCqATCxbtmwqX768ypcvr0aNGmnJkiWKiYnRSy+9dM8vPGPHjpW/v79Gjhx5X8NC0rp+YGBgqirK6NGj77jeI488Ikn6+++/7/pckZGRunHjhiQpOjpa/v7+tw25uTW859q1aynLfH19U62T1g7M3YwZM0aDBw/WmTNn9Oabb6pBgwbq1KmTfv3119vWvXbtmhwOh/LmzXvbfXnz5k2VV7r5hf1/M9/vdSKeeOIJlS5dOuXX/I0bN6pu3bp3PGtWZGSkXnnlFVWpUkXt2rXTzJkzdfXqVUn3vi7FQw89JJvNds88bdq0kd1u1+OPP65ixYr967q33of/3Wb/FBQUpEuXLik8PFzJycnaunXrvw59+qe0fn7/qXz58urXr5+WLFmi0NBQvfrqq/rjjz+0YMGCND3PP/n6+t627QEgM6NTAbiRhx56SOPHj9f58+c1adKkf103V65cmjBhgn777TfNnTv3ns+d1vXnzp2bUkVZuXKlBg4ceMf1Spcurbx582rHjh13fa4JEyboqaeeUnx8vHLlyqUrV67cNnn54sWLknTXIUhpkZycnOrf/1sp8Pb2Vr9+/bRp0yZt375d48eP1+nTp/X666/f9lw5cuSQzWbT5cuXb7vv0qVLd5xgbERQUJC2bdumhISEf51vMHToUB08eFAff/yxfvrpJ23atEljxoxJtxzx8fGaNGmSAgICdPLkyXt+Ab+13W51bO6kVKlSeuKJJ7R582aFhobqxo0bevrpp+8rT1o/v1OnTr1jtc/X11f9+/dXqVKlUg21S6urV6+my2cVADIKOhWAm2ncuLGeeuopbdiw4Z4XX2vUqJFatGih+fPn39dQjrSsX7JkyZQqSvny5e86rMXDw0Pdu3fXd999p2+++ea2+8PCwvTtt9+qSZMm8vHxUfXq1ZWcnHzbtRfWrVsnSapSpco92/FvsmfPnjLP45b9+/en/H98fLyaNGmScranhx9+WF26dFHz5s1ve5x0c/x8uXLltHHjxlSdlWvXrum7774znPd/NWvWTFevXtWcOXMUHR19x3k1krRv3z41adJENWvWTBmWdKtjd6uS88/hWmk1ffp0nT17Vh9++KG6deumWbNm6dixY3dd/+GHH5akO76H/xQUFKSQkBB9/fXXCgwMVNasWe87U1o+v0888YT++OOPO17jIzY2VhcvXrzjaWzv17lz51KqdADgDrhOBeCGRo8erVatWuntt9/W6tWrbxsq9E/jxo1TaGjoHX9JT4/170f37t0VFhamQYMGqUOHDnr66afl4eGh8PBwffbZZypRooRGjBghSapXr55q1KihN954QxcvXlSZMmW0d+9eLViwQG3btjV8wblnnnlGwcHBmjdvnipWrKjvvvsu1YRaHx8flS1bVrNmzZKXl5dKliypP/74Q6tXr1aTJk3u+Jyvv/66Xn75ZfXs2VMvvPCCEhMTNX/+fCUkJNy1gvOgHnvsMZUvX14LFy5UYGCgsmXLdsf1nnzySa1fv15ly5ZVwYIFdeDAAQUHB8tms6XMOcmRI4ckaffu3SpWrJgqVKhwXxnCwsL02WefafDgwSpatKheeeUVbdmyRSNHjtSXX355x9MdFy1aVA8//LD2799/x1ML3xIUFKTZs2dr3bp1KRefS4v7/fy2adNG69ev1/Dhw7Vnzx7Vr19fOXPm1J9//qlPP/1UPj4+eumll9L8+tLNDuWJEyf08ssvP9DjASAjolIBuKGiRYuqa9eu+u2331KuO3A3uXPn1oQJE+77udO6/v3w8vLSnDlzNHr0aP36668aMWKEXn31VW3fvl19+vTR0qVLUybj2mw2BQcHq1OnTvr000/Vu3dvbd68WUOGDLnnkK/70adPH3Xo0EGLFy9Wv379dOHChdue96233lK7du20ePFivfTSS5ozZ47at29/1/elVq1a+vjjj5WQkKDXXntN48aNU4ECBfTll1+muv5GegkKClJiYuK/zjeYMmWKKlSooIkTJ2rAgAEpF86rW7euwsPDJd2s2vTo0UPbtm1Tz54972suwvXr1zVq1CgFBASkfGn28/PTG2+8oV9//fVfhx41adJE33///b8+f/HixRUQEKDs2bOnuur2/brfz6+3t7cWLVqkwYMH6/Dhwxo+fLi6d++uOXPmqHr16lq5cuUDXxF7586d8vLyuu+hWwCQGdgc9zsDEAAAJ7pw4YICAwO1ePHidL3CeUbTtWtXlSpVKl3nsACA2ahUAAAyhAIFCqhbt24pp7Z1Rz///LOOHTum3r17mx0FANIVnQoAQIbxyiuv6MKFC9q5c6fZUZxi8uTJ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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制混淆矩阵热力图\n",
    "plt.figure(figsize=(10, 8))\n",
    "sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title(\"RNN - Confusion Matrix (MNIST)\")\n",
    "plt.xlabel(\"Predicted Label\")\n",
    "plt.ylabel(\"True Label\")\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-11T14:57:31.695117Z",
     "start_time": "2025-06-11T14:57:31.123558Z"
    }
   },
   "id": "856d8a80e78fede9",
   "execution_count": 7
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "2b4ee7c748630958"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
